package dao

import (
	"time"
)

// 这是 WechatUser 的全局公开dao对象，被service层调用!
var WechatUserDao = wechatUserDao{}

// 微信用户绑定表
// 这是 wechat_user表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type WechatUser struct {
	Id         int32     `json:"id" form:"id" db:"id" v:"id"`                                     // 自增ID
	OpenId     string    `json:"open_id" form:"open_id" db:"open_id" v:"open_id"`                 // 用户的标识,对当前公众号/小程序唯一
	Nickname   string    `json:"nickname" form:"nickname" db:"nickname" v:"nickname"`             // 用户的昵称
	SessionKey string    `json:"session_key" form:"session_key" db:"session_key" v:"session_key"` // 小程序返回的 session_key
	Avatar     string    `json:"avatar" form:"avatar" db:"avatar" v:"avatar"`                     // 用户微信头像
	OpenInfo   string    `json:"open_info" form:"open_info" db:"open_info" v:"open_info"`         // 用户微信的其他信息,json格式
	Uid        int32     `json:"uid" form:"uid" db:"uid" v:"uid"`                                 // 用户UID
	CreatedAt  time.Time `json:"created_at" form:"created_at" db:"created_at" v:"created_at"`
	UpdatedAt  time.Time `json:"updated_at" form:"updated_at" db:"updated_at" v:"updated_at"`
}

// 注意:这是 WechatUser 的私有dao对象，只能在dao层内使用!
type wechatUserDao struct {
	InsertTemplate func(arg WechatUser) (int64, error)            //插入一条记录
	UpdateTemplate func(arg WechatUser) (int64, error)            //更新一条记录
	DeleteTemplate func(id int64) (int64, error)                  `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (WechatUser, error)             `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg WechatUserList) ([]WechatUser, error) //模糊分页查询
}

/*
// 这是 wechat_user 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type WechatUserPostman struct {
id
open_id
nickname
session_key
avatar
open_info
uid
created_at
updated_at

}*/

// 这是 wechat_user 表的批量请求参数
type WechatUserReq struct {
	List []WechatUser `json:"list" form:"list"`
}

// 这是 wechatUserDao.List()方法的请求参数
type WechatUserList struct {
	Page
}
